package com.liang.digui;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class recursionStudy {
    public static void main(String[] args) {
//        test(6);
//        System.out.println("阶乘===="+f(3));
//        System.out.println("递归阶+"+f1(3));
//        searchFile(new File("D:/"),"QQ.exe" );
        deleteDir(new File("D:\\新建文件夹"));
        Map<String,Object> map = new HashMap<>();
        map.put(null, "22222");
        map.put(null, "222221");
        System.out.println("log========="+map);
    }
    //死循环
    public static void test(int n){
        if (n>1){
            n--;
            test(n);
        }
        System.out.println("---死循环"+n);
    }

    //递归求阶乘 1*2*3 = 6
    public static int f(int n){
        if (n==1){
            return 1;
        }else {
            return n * f(n-1);
        }
    }

    //递归求阶+的值
    public static  int f1(int b){
        if (b==1){
            return 1;
        }else {
            return b+(b-1);
        }
    }

    /**
     *  递归查询目录下搜索某个文件
     * @param dir 目录
     * @param fileName 要搜索文件名称
     */
    public static void searchFile(File dir,String fileName){
        //过滤非法条件
        if (dir == null || !dir.exists() || dir.isFile()){
            return;//代表无法搜索
        }
        //获取目录下全部一级文件对象
        File[] files = dir.listFiles();

        //判断当前目录下是否存在一级文件对象
        if (files != null && files.length>0){
            //遍历
            for (File file : files) {
                //判断文件类型
                if (file.isFile()){
                    //判断文件名是否使我们需要的，contains是否包含
                    if (file.getName().contains(fileName)){
                        System.out.println("找到了++++"+file.getAbsolutePath());
                        try {
                            Runtime runtime = Runtime.getRuntime();
                            runtime.exec(file.getAbsolutePath());
                        }catch (IOException e){
                            System.out.println(e.getMessage()+"启动绝对文件异常");
                        }
                    }
                }else {
                    //如果是文件，递归
                    searchFile(file,fileName);
                }
            }
        }
    }

    /**
     * 删除指定文件件
     * @param dir 文件夹名称
     */
    public static void deleteDir(File dir){
        //拦截，判空
        if (dir==null || !dir.exists()) return;
        //如果是文件直接删除
        if (dir.isFile()){
            dir.delete();
            return;
        }
        //dir是文件夹，遍历删除
        File[] files = dir.listFiles();
        //判断是否存在一级文件数据目录
        if (files!=null){
            //判断文件夹是否存在文件
            if (files.length>0){
                //遍历内部文件，逐级删除
                for (File file : files) {
                    if (file.isFile()){
                        file.delete();
                    }else {
                        //说明是文件夹，递归创建
                        deleteDir(file);
                    }
                }
            }
            //最后把自己删掉
            dir.delete();
        }
    }

}
